package com.hj.saapp.common.utils;


import android.content.Context;
import android.content.SharedPreferences;

import com.hj.saapp.BCDApplication;

public class PreferencesUtils
{
    public static final String DEFAULT = "Default";
    
    public String preName;


    private PreferencesUtils(String name)
    {
        preName = name;
    }
    
    public static PreferencesUtils getInstance()
    {
        PreferencesUtils utils = new PreferencesUtils(DEFAULT);
        return utils;
    }
    
    /**
     * 
     * <>
     * 
     * @param name
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static PreferencesUtils getInstance(String name)
    {
        PreferencesUtils utils = new PreferencesUtils(name);
        return utils;
    }
    
    /**
     * put string preferences
     * 
     * @param context
     * @param key The name of the preference to modify
     * @param value The new value for the preference
     * @return True if the new values were successfully written to persistent storage.
     */
    public boolean putString(Context context, String key, String value)
    {
        SharedPreferences settings = context.getSharedPreferences(preName, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString(key, value);

        return editor.commit();
    }
    
    /**
     * get string preferences
     * 
     * @param context
     * @param key The name of the preference to retrieve
     * @return The preference value if it exists, or null. Throws ClassCastException if there is a preference with this
     *         name that is not a string
     * @see #getString(Context, String, String)
     */
    public String getString( String key)
    {
        return getString(BCDApplication.getApp(), key, null);
    }
    
    /**
     * get string preferences
     * 
     * @param context
     * @param key The name of the preference to retrieve
     * @param defaultValue Value to return if this preference does not exist
     * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
     *         this name that is not a string
     */
    public String getString(Context context, String key, String defaultValue)
    {
        SharedPreferences settings = context.getSharedPreferences(preName, Context.MODE_PRIVATE);


        return settings.getString(key, defaultValue);
    }
    
    /**
     * put int preferences
     * 
     * @param context
     * @param key The name of the preference to modify
     * @param value The new value for the preference
     * @return True if the new values were successfully written to persistent storage.
     */
    public boolean putInt(Context context, String key, int value)
    {
        SharedPreferences settings = context.getSharedPreferences(preName, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putInt(key, value);
        return editor.commit();
    }
    
    /**
     * get int preferences
     * 
     * @param context
     * @param key The name of the preference to retrieve
     * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
     *         name that is not a int
     * @see #getInt(Context, String, int)
     */
    public int getInt(Context context, String key)
    {
        return getInt(context, key, -1);
    }
    
    /**
     * get int preferences
     * 
     * @param context
     * @param key The name of the preference to retrieve
     * @param defaultValue Value to return if this preference does not exist
     * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
     *         this name that is not a int
     */
    public int getInt(Context context, String key, int defaultValue)
    {
        SharedPreferences settings = context.getSharedPreferences(preName, Context.MODE_PRIVATE);
        return settings.getInt(key, defaultValue);
    }
    
    /**
     * put long preferences
     *
     * @param key The name of the preference to modify
     * @param value The new value for the preference
     * @return True if the new values were successfully written to persistent storage.
     */
    public boolean putLong(String key, long value)
    {
        SharedPreferences settings = BCDApplication.getApp().getSharedPreferences(preName, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putLong(key, value);
        return editor.commit();
    }
    
    /**
     * get long preferences
     *
     * @param key The name of the preference to retrieve
     * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
     *         name that is not a long
     */
    public long getLong( String key)
    {
        return getLong( key, -1);
    }
    
    /**
     * get long preferences
     *
     * @param key The name of the preference to retrieve
     * @param defaultValue Value to return if this preference does not exist
     * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
     *         this name that is not a long
     */
    public long getLong( String key, long defaultValue)
    {
        SharedPreferences settings = BCDApplication.getApp().getSharedPreferences(preName, Context.MODE_PRIVATE);
        return settings.getLong(key, defaultValue);
    }
    
    /**
     * put float preferences
     * 
     * @param context
     * @param key The name of the preference to modify
     * @param value The new value for the preference
     * @return True if the new values were successfully written to persistent storage.
     */
    public boolean putFloat(Context context, String key, float value)
    {
        SharedPreferences settings = context.getSharedPreferences(preName, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putFloat(key, value);
        return editor.commit();
    }
    
    /**
     * get float preferences
     * 
     * @param context
     * @param key The name of the preference to retrieve
     * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
     *         name that is not a float
     * @see #getFloat(Context, String, float)
     */
    public float getFloat(Context context, String key)
    {
        return getFloat(context, key, -1);
    }
    
    /**
     * get float preferences
     * 
     * @param context
     * @param key The name of the preference to retrieve
     * @param defaultValue Value to return if this preference does not exist
     * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
     *         this name that is not a float
     */
    public float getFloat(Context context, String key, float defaultValue)
    {
        SharedPreferences settings = context.getSharedPreferences(preName, Context.MODE_PRIVATE);
        return settings.getFloat(key, defaultValue);
    }
    
    /**
     * put boolean preferences
     * 
     * @param context
     * @param key The name of the preference to modify
     * @param value The new value for the preference
     * @return True if the new values were successfully written to persistent storage.
     */
    public boolean putBoolean(Context context, String key, boolean value)
    {
        SharedPreferences settings = context.getSharedPreferences(preName, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean(key, value);
        return editor.commit();
    }
    
    /**
     * get boolean preferences, default is false
     * 
     * @param context
     * @param key The name of the preference to retrieve
     * @return The preference value if it exists, or false. Throws ClassCastException if there is a preference with this
     *         name that is not a boolean
     * @see #getBoolean(Context, String, boolean)
     */
    public boolean getBoolean(Context context, String key)
    {
        return getBoolean(context, key, false);
    }
    
    /**
     * get boolean preferences
     * 
     * @param context
     * @param key The name of the preference to retrieve
     * @param defaultValue Value to return if this preference does not exist
     * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
     *         this name that is not a boolean
     */
    public boolean getBoolean(Context context, String key, boolean defaultValue)
    {
        SharedPreferences settings = context.getSharedPreferences(preName, Context.MODE_PRIVATE);
        return settings.getBoolean(key, defaultValue);
    }
    
    public SharedPreferences getSharedPreferences(Context context)
    {
        return context.getSharedPreferences(preName, Context.MODE_PRIVATE);
    }


}
